package com.bt.springboot.common.util;

/**
 * 隐私数据隐藏工具类
 * @author zkx
 * @Date 2023/7/20 15:10
 */
public class PrivacyUtil {

	private PrivacyUtil() {
	}

	public static String hidePhone(String phone){
		return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})","$1****$2");
	}

	public static String hideEmail(String email){
		return email.replaceAll("(\\w?)(\\w+)(\\w)(@\\w+\\.[a-z]+(\\.[a-z]+)?)", "$1****$3$4");
	}

	/**
	 * 隐藏身份证
	 */
	public static String hideIDCard(String idCard) {
		return idCard.replaceAll("(\\d{4})\\d{10}(\\w{4})", "$1*****$2");
	}

	/**
	 * 【中文姓名】只显示第一个汉字，其他隐藏为星号，比如：任**
	 */
	public static String hideChineseName(String chineseName) {
		if (chineseName == null) {
			return null;
		}
		return desValue(chineseName, 1, 0, "*");
	}

	/**
	 * 对字符串进行脱敏操作
	 * @param origin          原始字符串
	 * @param prefixNoMaskLen 左侧需要保留几位明文字段
	 * @param suffixNoMaskLen 右侧需要保留几位明文字段
	 * @param maskStr         用于遮罩的字符串, 如'*'
	 * @return 脱敏后结果
	 */
	public static String desValue(String origin, int prefixNoMaskLen, int suffixNoMaskLen, String maskStr) {
		if (origin == null) {
			return null;
		}
		StringBuilder sb = new StringBuilder();
		for (int i = 0, n = origin.length(); i < n; i++) {
			if (i < prefixNoMaskLen) {
				sb.append(origin.charAt(i));
				continue;
			}
			if (i > (n - suffixNoMaskLen - 1)) {
				sb.append(origin.charAt(i));
				continue;
			}
			sb.append(maskStr);
		}
		return sb.toString();
	}
}
